{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Table of Contents\n", "* [1. Subroutines](#1.-Subroutines)\n", "\t* [1.1 Why subroutines?](#1.1-Why-subroutines?)\n", "\t* [1.2 Writing Subroutines](#1.2-Writing-Subroutines)\n", "\t* [1.3 JSR/JSRR](#1.3-JSR/JSRR)\n", "\t\t* [1.3.1 RET instruction](#1.3.1-RET-instruction)\n", "\t* [1.4 Interfacing with Subroutines](#1.4-Interfacing-with-Subroutines)\n", "\t* [1.5 Example: Negating a number](#1.5-Example:-Negating-a-number)\n", "\t* [1.6 Problems using Subroutines?](#1.6-Problems-using-Subroutines?)\n", "\t\t* [1.6.1 Stack](#1.6.1-Stack)\n", "\t* [1.7 Warning: Heresy Approaching!](#1.7-Warning:-Heresy-Approaching!)\n", "\t\t* [1.7.1 Recursion in High-level Languages](#1.7.1-Recursion-in-High-level-Languages)\n", "\t\t* [1.7.2 Recursion](#1.7.2-Recursion)\n", "\t\t* [1.7.3 Handling Recursion via Stacks](#1.7.3-Handling-Recursion-via-Stacks)\n", "\t* [1.8 recur program](#1.8-recur-program)\n", "\t* [1.9 recur.asm](#1.9-recur.asm)\n", "\t* [1.10 Recursion](#1.10-Recursion)\n", "\t* [1.11 Problems with recursion, etc](#1.11-Problems-with-recursion,-etc)\n", "\t* [1.12 Let the computer figure it out!](#1.12-Let-the-computer-figure-it-out!)\n", "\t* [1.13 Predictions, By Doug (2015)](#1.13-Predictions,-By-Doug-%282015%29)\n", "\t* [1.14 Why is this so controversial?](#1.14-Why-is-this-so-controversial?)\n", "\t* [1.15 Question](#1.15-Question)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. Subroutines" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* **Douglas Blank, Fall 2015**\n", "* **Bryn Mawr College, CS240 Computer Organization**\n", "* **Notes on Chapter #9**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.1 Why subroutines?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* [Go To Statement Considered Harmful](http://delivery.acm.org/10.1145/370000/362947/p147-salton.pdf?ip=165.106.129.127&id=362947&acc=ACTIVE%20SERVICE&key=7777116298C9657D%2E33F81C08BF03294B%2E0B0329B2E2B2B08D%2E4D4702B0C3E38B35&CFID=554146065&CFTOKEN=91327589&__acm__=1447257799_05beee47c2ba3f68085f8da72f5be7be)\n", " * [Edsger Dijkstra](https://en.wikipedia.org/wiki/Edsger_W._Dijkstra)\n", " * \"Structured programming\"\n", " * Spaghetti code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.2 Writing Subroutines" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Blocks of code can be encoded as subroutines\n", " * One entry point (where you JSR to)\n", " * One exit point (where you RET from)\n", "* A subroutine is a program fragment that:\n", " * Lives in user space\n", " * Performs a well-defined task\n", " * Is invoked (\"called\") by a user program\n", " * Returns control to the calling program when finished\n", "* Reasons for subroutines:\n", " * Reuse useful (and debugged) code without having to keep typing it in\n", " * Divide task among multiple programmers\n", " * Use vendor-supplied **library** of useful routines" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.3 JSR/JSRR" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Jumps to a location (like an unconditional branch, BRnzp PC+OFFSET or JMP REG), and saves current PC (address of next instruction) in R7\n", " * Saving the return address is called “linking”\n", "* JSR vs JSRR\n", " * Bit 11 specifies addressing mode\n", " * If IR[11]=1, JSR\n", " * PC-relative: target address = PC + Sext(IR[10:0])\n", " * If IR[11]=0, JSRR\n", " * Register: target address = contents of Register[IR[8:6]] \n", "\n", "*What important feature does JSSR provide that JSR does not?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.3.1 RET instruction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "RET is the same as \"JMP R7\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.4 Interfacing with Subroutines" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Registers may be be overwritten in subroutines so we need to save current register values. Who saves the register values?\n", "* **Called routine saves registers** -- “callee-save”\n", " * Before start, save any registers that will be altered (unless altered value is desired by calling program!)\n", " * Before return, restore those same registers\n", "* **Calling routine saves registers** -- “caller-save”\n", " * Save registers destroyed by own instructions or by called routines (if known), if values needed later. Examples:\n", " * save R7 before TRAPs that return\n", " * save R0 before TRAP x23 (input character)\n", " * Or avoid altogether using registers that callees use\n", "* Register values are saved by storing them in memory" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.5 Example: Negating a number" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Use JSR to jump\n", " * saves PC to R7\n", "* Use RET to return\n", " * sets PC from R7" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "============================================================\n", "Memory disassembled:\n", "============================================================\n", " x3000: x5000 AND R0, R0, R0 [line: 1]\n", " x3001: x102A ADD R0, R0, #10 [line: 2]\n", " x3002: x4801 JSR NEGATE [line: 3]\n", " x3003: xF025 HALT [line: 4]\n", "NEGATE: x3004: x903F NOT R0, R0 [line: 6]\n", " x3005: x1021 ADD R0, R0, #1 [line: 7]\n", " x3006: xC1C0 RET [line: 8]\n", "\n", "============================================================\n", "Registers:\n", "============================================================\n", "PC: x3007\n", "N: 0 Z: 1 P: 0 \n", "R0: x0000 R1: x0000 R2: x0000 R3: x0000 \n", "R4: x0000 R5: x0000 R6: x0000 R7: x0000 \n" ] } ], "source": [ " .ORIG x3000\n", " AND R0, R0, R0\n", " ADD R0, R0, #10\n", " JSR NEGATE\n", " HALT\n", "NEGATE:\n", " NOT R0, R0\n", " ADD R0, R0, #1\n", " RET\n", " .END" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "============================================================\n", "Computation completed\n", "============================================================\n", "Instructions: 7\n", "Cycles: 46 (0.000023 milliseconds)\n", "\n", "============================================================\n", "Registers:\n", "============================================================\n", "PC: x048E\n", "N: 1 Z: 0 P: 0 \n", "R0: xFFF6 R1: x0000 R2: x0000 R3: x0000 \n", "R4: x0000 R5: x0000 R6: x0000 R7: x3004 \n" ] } ], "source": [ "%exe" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.6 Problems using Subroutines?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* How do you handle one subroutine calling another?\n", " * Calling subroutines is like passing a baton\n", "* Takes some time for JSR and RET\n", "* How do you handle recursion?\n", " * A function being used more than once during a call\n", " \n", "Stacks! Chapter 10" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.6.1 Stack" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can have many general purpose stacks in your programs (eg, calculator in chapter 10).\n", "\n", "But you need a \"call stack\" for handling subroutine calls." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```gas\n", " LEA R2, Stack \t;; R2 is Top of Stack\n", "Stack: .BLKW #100\n", "\n", "...\n", "\n", "PUSH: STR R7, R2, #0\t\t;; Save R7 to Stack\n", " ADD R2, R2, #1\t\t;; Increment Stack\n", "\n", "...\n", " \n", "POP: ADD R2, R2, #-1\t\t;; Decrement Stack\n", " LDR R7, R2, #0\t\t;; Load Stack into R7 \n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.7 Warning: Heresy Approaching!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following content may not be appropriate for all viewers. It contains information that the establishment may not want you to know. This information may forever change your mental structures and ideas of computation. You have been warned. :)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.7.1 Recursion in High-level Languages" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Almost all high-level languages implement function calls using a call stack.\n", "\n", "* Call stack is a fixed size!" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Traceback (most recent call last):\n", " File \"/usr/lib/python3.4/site-packages/metakernel-0.10.5-py3.4.egg/metakernel/magics/python_magic.py\", line 63, in eval\n", " exec(code.strip(), self.env)\n", " File \"\", line 7, in \n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 5, in factorial\n", " File \"\", line 2, in factorial\n", "RuntimeError: maximum recursion depth exceeded in comparison\n", "\n" ] } ], "source": [ "%%python\n", "\n", "def factorial(n):\n", " if n == 1:\n", " return 1\n", " else:\n", " return n * factorial(n - 1)\n", "\n", "print(factorial(10000))" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%processing\n", "\n", "int factorial(int n) {\n", " if (n == 1) {\n", " return 1;\n", " } else {\n", " return n * factorial(n - 1);\n", " }\n", "}\n", "\n", "fill(0);\n", "text(factorial(5), 0, 10);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.7.2 Recursion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Simplest solution: use a \"stack\" to keep track of who called whom\n", "* Fixed size makes using recursion risky because you don't know how deep you can go" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.7.3 Handling Recursion via Stacks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The relationship between stacks and recursion are not well-understood ideas by many computer scientists. For example, a course using the LC3 at UPenn claims:\n", "\n", "\n", "\n", "\"LC3 Simulator cannot handle Recursion currently\"\n", "\n", "This is simply not true.\n", "\n", "(It may be true that the lc3 C compiler cannot handle recursion.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.8 recur program" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```python\n", "# pseudo code:\n", "def recur(N):\n", "\tr0 += 1\n", "\tif N == 0:\n", "\t\treturn\n", "\telse:\n", "\t\trecur(N - 1)\n", " \n", "print(r0)\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.9 recur.asm" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "============================================================\n", "Memory disassembled:\n", "============================================================\n", " x3000: xE406 LEA R2, STACK [line: 1]\n", " x3001: x5020 AND R0, R0, #0 [line: 2]\n", " x3002: x2669 LD R3, ASCII [line: 3]\n", "MAIN: x3003: x4869 JSR FOO [line: 4]\n", " x3004: x1003 ADD R0, R0, R3 [line: 5]\n", " x3005: xF021 OUT [line: 6]\n", " x3006: xF025 HALT [line: 7]\n", "STACK: x3007: x3004 ST R0, x300C [line: 8]\n", " x3008: x3075 - 12405 \n", " x3009: x3075 - 12405 \n", " x300A: x0000 - \\0\n", " x300B: x0000 - \\0\n", " x300C: x0000 - \\0\n", " x300D: x0000 - \\0\n", " x300E: x0000 - \\0\n", " x300F: x0000 - \\0\n", " x3010: x0000 - \\0\n", " x3011: x0000 - \\0\n", " x3012: x0000 - \\0\n", " x3013: x0000 - \\0\n", " x3014: x0000 - \\0\n", " x3015: x0000 - \\0\n", " x3016: x0000 - \\0\n", " x3017: x0000 - \\0\n", " x3018: x0000 - \\0\n", " x3019: x0000 - \\0\n", " x301A: x0000 - \\0\n", " x301B: x0000 - \\0\n", " x301C: x0000 - \\0\n", " x301D: x0000 - \\0\n", " x301E: x0000 - \\0\n", " x301F: x0000 - \\0\n", " x3020: x0000 - \\0\n", " x3021: x0000 - \\0\n", " x3022: x0000 - \\0\n", " x3023: x0000 - \\0\n", " x3024: x0000 - \\0\n", " x3025: x0000 - \\0\n", " x3026: x0000 - \\0\n", " x3027: x0000 - \\0\n", " x3028: x0000 - \\0\n", " x3029: x0000 - \\0\n", " x302A: x0000 - \\0\n", " x302B: x0000 - \\0\n", " x302C: x0000 - \\0\n", " x302D: x0000 - \\0\n", " x302E: x0000 - \\0\n", " x302F: x0000 - \\0\n", " x3030: x0000 - \\0\n", " x3031: x0000 - \\0\n", " x3032: x0000 - \\0\n", " x3033: x0000 - \\0\n", " x3034: x0000 - \\0\n", " x3035: x0000 - \\0\n", " x3036: x0000 - \\0\n", " x3037: x0000 - \\0\n", " x3038: x0000 - \\0\n", " x3039: x0000 - \\0\n", " x303A: x0000 - \\0\n", " x303B: x0000 - \\0\n", " x303C: x0000 - \\0\n", " x303D: x0000 - \\0\n", " x303E: x0000 - \\0\n", " x303F: x0000 - \\0\n", " x3040: x0000 - \\0\n", " x3041: x0000 - \\0\n", " x3042: x0000 - \\0\n", " x3043: x0000 - \\0\n", " x3044: x0000 - \\0\n", " x3045: x0000 - \\0\n", " x3046: x0000 - \\0\n", " x3047: x0000 - \\0\n", " x3048: x0000 - \\0\n", " x3049: x0000 - \\0\n", " x304A: x0000 - \\0\n", " x304B: x0000 - \\0\n", " x304C: x0000 - \\0\n", " x304D: x0000 - \\0\n", " x304E: x0000 - \\0\n", " x304F: x0000 - \\0\n", " x3050: x0000 - \\0\n", " x3051: x0000 - \\0\n", " x3052: x0000 - \\0\n", " x3053: x0000 - \\0\n", " x3054: x0000 - \\0\n", " x3055: x0000 - \\0\n", " x3056: x0000 - \\0\n", " x3057: x0000 - \\0\n", " x3058: x0000 - \\0\n", " x3059: x0000 - \\0\n", " x305A: x0000 - \\0\n", " x305B: x0000 - \\0\n", " x305C: x0000 - \\0\n", " x305D: x0000 - \\0\n", " x305E: x0000 - \\0\n", " x305F: x0000 - \\0\n", " x3060: x0000 - \\0\n", " x3061: x0000 - \\0\n", " x3062: x0000 - \\0\n", " x3063: x0000 - \\0\n", "\n", "============================================================\n", "Registers:\n", "============================================================\n", "PC: x3078\n", "N: 0 Z: 1 P: 0 \n", "R0: x0000 R1: x0000 R2: x0000 R3: x0000 \n", "R4: x0000 R5: x0000 R6: x0000 R7: x0000 \n" ] } ], "source": [ " .ORIG x3000\n", " LEA R2, Stack ; R2 is Stack\n", " AND R0, R0, #0 ; Times Foo called\n", " LD R3, ASCII ; ASCII \"0\"\n", "Main: JSR Foo\n", " ADD R0, R0, R3\n", " OUT\n", " HALT\n", "Stack: .BLKW #100\n", "Counter: .FILL #3\n", "ASCII: .FILL #48\n", "\n", ";;;; --------------------\n", "\n", "Foo: STR R7, R2, #0 ; Store R7 to stack\n", " ADD R2, R2, #1 ; Increment stack\n", " ADD R0, R0, #1 ; Called Foo! Increment\n", " LD R1, Counter ; 1. Decrement Counter\n", " ADD R1, R1, #-1 ; 2.\n", " ST R1, Counter ; 3.\n", " BRz After ; After N times,RET \n", " JSR Foo ; Otherwise, recur\n", "After: ADD R2, R2, #-1 ; Decrement stack \n", " LDR R7, R2, #0\n", " RET\n", " .END" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3============================================================\n", "Computation completed\n", "============================================================\n", "Instructions: 45\n", "Cycles: 344 (0.000172 milliseconds)\n", "\n", "============================================================\n", "Registers:\n", "============================================================\n", "PC: x048E\n", "N: 0 Z: 1 P: 0 \n", "R0: x0033 R1: x0000 R2: x3007 R3: x0030 \n", "R4: x0000 R5: x0000 R6: x0000 R7: x3007 \n" ] } ], "source": [ "%exe" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.10 Recursion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Simplest solution: use a \"stack\" to keep track of who-called-who\n", "\n", "But that has problems!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are other methods of keeping track of the \"linking\" between blocks of computation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.11 Problems with recursion, etc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Can run out of stack space\n", "* Sometimes we don't need a stack at all\n", "\n", "```python\n", "# pseudo code:\n", "\n", "def loop():\n", " check_something()\n", " loop()\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Take Programming Languages for more heresy.*" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%kernel calysto_scheme.kernel CalystoScheme" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%%kx\n", "\n", "(set! use-stack-trace #f)\n", "\n", "(define loop\n", " (lambda () (loop)))\n", " \n", ";;(loop)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.12 Let the computer figure it out!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* In the future, a programmer may have no idea what assembly code is being used\n", "* May be a huge difference between what the programmer writes and what the machine executes\n", " * Computer may use subroutines \"in-line\" rather than calling\n", " * Rearrange code, learn best paths, change types..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.13 Predictions, By Doug (2015)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Compilers and assembly language will go away in favor of runtime systems that compile and adapt on the fly\n", "* Generated machine code won't be able to be \"understood\" by humans\n", "* Many of the current styles of computing will be irrelevant" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.14 Why is this so controversial?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* I don't know\n", "* Engineers are control freaks\n", "* Giving up control (and understanding) is not something that many want to do\n", "* It breaks with traditional computing\n", "* What will the humans do? What is \"programming\" then?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.15 Question" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* If there is little connection between what I write with a high-level language and the machine does, and the computer can figure it out the details better than I can, why do I need to learn assembly language?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Because we have to write this future system.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## References" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "CMPE12 – Summer 2008 – Slides by ADB\n", "CMPE12 – Winter 2009 – Ferguson" ] } ], "metadata": { "kernelspec": { "display_name": "Calysto LC3", "language": "gas", "name": "calysto_lc3" }, "language_info": { "codemirror_mode": { "name": "gas", "version": 3 }, "file_extension": ".asm", "mimetype": "text/x-gas", "name": "gas" } }, "nbformat": 4, "nbformat_minor": 0 }